// pages/index/index.js
import request from '../../utils/request'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    today: (new Date()).getDate(),

    bannerList: [], // 轮播图数据
    recommendList: [], // 推荐歌单
    rankingList: [], // 排行榜
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 轮播图数据
    this.getBannerList()
    // 推荐歌单
    this.getRecommendList()
    // 排行榜
    this.getRankingList()
  },

  // 轮播图数据
  async getBannerList() {
    let bannerListData = await request('/banner', { type: 2 });
    this.setData({
      bannerList: bannerListData.banners
    })
  },

  // 推荐歌单
  async getRecommendList(cb) {
    let recommendListData = await request('/personalized', { limit: 10, timestamp: Date.now() });
    recommendListData.result.map((item) => {
      if (item.playCount >= 20000) {
        if (item.playCount >= 100000000) {
          item.playCount = item.playCount.toString().slice(0, -8) + '亿'
        }
        item.playCount = item.playCount.toString().slice(0, -4) + '万'
      }
    })
    this.setData({
      recommendList: recommendListData.result
    })

    // 有回调函数，就是下拉刷新，调用关闭下拉刷新
    cb && cb();
  },

  // 排行榜数据
  async getRankingList() {
    // 需要6个榜，idx 0-5，发送6次请求
    /*
      前++ 和 后++ 区别
      1、先看到++，就先运算，再赋值
      2、先看到值，就先赋值，再运算

      1、会改变原数组，并返回一个包含被删除元素的新数组。
        splice(指定修改的起始index，要移除的元素数量，移除元素后添加的新元素)
      2、不改变原数组，截取
        slice(截取的开始index，结束的index)
    */
    let index = 0;
    let resultArr = [];
    let playList = [991319590, 1978921795, 745956260, 3778678, 2884035, 6723173524];
    while (index < 6) {
      let rankingData = await request('/playlist/detail', { id: playList[index++] });
      let tracks = rankingData.playlist.tracks.slice(0, 3)

      // 把歌曲作者拼接起来
      tracks.map(item => item["arNameStr"] = item.ar.map(arName => arName.name).join('/'))

      let rankingItem = {
        name: rankingData.playlist.name,
        tracks: tracks
      }
      resultArr.push(rankingItem)

      this.setData({
        rankingList: resultArr
      })
    }
  },

  // 跳转至recommendSong页面的回调
  toRecommendSong(e) {
    let id = e.currentTarget.dataset.id;
    let title = e.currentTarget.dataset.title;
    let url = id ? `/pages/recommendSong/recommendSong?id=${id}&title=${title}` : '/pages/recommendSong/recommendSong';
    wx.navigateTo({ url });
  },

  // 跳转到播放页
  toSongDetail(e) {
    let id = e.currentTarget.dataset.id;
    let title = e.currentTarget.dataset.title;
    wx.navigateTo({
      url: `/pages/songDetail/songDetail?musicId=${id}&source=${title}`
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.getRecommendList(() => {
      wx.stopPullDownRefresh()
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})